package com.ykt.common.utils.page;

import java.io.Serializable;

/**
 * 封装分页查询基本条件，适用于单独使用或其他QueryBean继承使用。
 * <p/>
 * 本类适合使用“额外的对象”保存查询条件，该对象类继承本类即可。
 *
 * @author: hualong
 * @date 2014年2月20日 上午10:05:40
 */
public class PageQuery implements Serializable {
    private static final long serialVersionUID = 1L;

    public final static int DEFAULT_OFFSET = 0;
    public final static int DEFAULT_PAGE_NO = 1;
    public final static int DEFAULT_PAGE_SIZE = 20;

    // 从哪一条记录开始查询*/
    private int offset = DEFAULT_OFFSET;

    // 跳转页数，页数是从第一页是从1开始计算的
    private int pageNo = DEFAULT_PAGE_NO;

    // 每页的记录数(每页尺寸)*/
    private int pageSize = DEFAULT_PAGE_SIZE;

    // 总记录数
    private int dataTotal = 0;


    public PageQuery() {

    }

    public PageQuery(int offset, int pageSize) {
        this.setPageSize(pageSize);
        this.setOffset(offset);
    }

    public static int calcOffset(int pageNo, int pageSize) {
        pageNo = (pageNo == 0) ? 1 : pageNo;
        return (pageNo - 1) * pageSize;
    }

    /**
     * 获取每页开始行号
     */
    public int getOffset() {
        return offset;
    }

    public void setOffset(int offset) {
        this.offset = offset;
        this.calcPageNo();
    }

    private void calcPageNo() {
        this.pageNo = offset / pageSize + 1;
    }

    public int getPageSize() {
        return pageSize;
    }

    public void setPageSize(int pageSize) {
        this.pageSize = pageSize;
    }

    /**
     * 获取页号
     */
    public int getPageNo() {
        return pageNo;
    }

    public int getDataTotal() {
        return dataTotal;
    }

    public void setDataTotal(int dataTotal) {
        this.dataTotal = dataTotal;
    }

}
